package com.elephant.proxy.jdk;

public class Test {
    public static void main(String[] args) {
        System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");

        //jdk动态代理的原理，首先会调用Proxy.newProxyInstance方法，把一个InvocationHandlerlambad表达式传进去
		//然后在这里面会获取到类的加载器。他有两个特别关键的函数式接口，一个是BiFunction，一个Supplier。
		//最终做处理的是调用BiFunction里面的apply方法找到ProxyClassFactory类进行处理。
		//在这里处理代理类实现的所有接口，找到所有方法进行处理，还会给代理类命名成$Proxy开头的目标类。然后通过
		//generateProxyClass()方法进行代理类生成字节码，并加载到JVM中。
        Calculator proxy = CalculatorProxy.getProxy(new MyCalculator());
        proxy.add(1,1);
        System.out.println(proxy.getClass());
    }
}